package main

func main() {

	// l6 := ListNode{
	// 	Val:  6,
	// 	Next: nil,
	// }

	// l5 := ListNode{
	// 	Val:  4,
	// 	Next: &l6,
	// }

	// l4 := ?
	l3 := ListNode{
		Val:  1,
		Next: nil,
	}

	l2 := ListNode{
		Val:  1,
		Next: &l3,
	}

	head := ListNode{
		Val:  1,
		Next: &l2,
	}

	PrintList(&head)

	r := removeElements(&head, 1)

	PrintList(r)

}

func removeElements(head *ListNode, val int) *ListNode {

	if head == nil {
		return head
	}

	head.Next = removeElements(head.Next, val)

	if head.Val == val {
		head = head.Next
	}

	return head

}

type ListNode struct {
	Val  int
	Next *ListNode
}

func PrintList(l *ListNode) {

	for l != nil {
		print(l.Val, " ")
		l = l.Next
	}

	println("")
}
